// Package models 定义了项目中使用的所有数据模型
package models

import "time"

// ChecksumTask 代表一个校验任务
type ChecksumTask struct {
	// 数据库信息
	SchemaName string // 数据库名
	TableName  string // 表名
	DBID       string // 数据库ID标识(源或目标)

	// 块信息
	ChunkNo        int      // 块编号
	StartKeyValues []string // 起始键值(字符串形式)
	StartKeyString string   // 起始键字符串表示
	NumKeyColumns  int      // 键列数量

	// SQL相关
	SQLTemplate string // SQL模板

	// 键信息
	KeyInfo *KeyInfo // 表的键信息
}

// TableKeyInfo 表示表的键信息 (为了保持与db.KeyInfo一致，更名为KeyInfo)
type KeyInfo struct {
	Columns   []string // 键列名
	Types     []string // 键列类型
	IsPrimary bool     // 是否是主键
	IndexName string   // 索引名称
}

// ChecksumResult 代表一个校验结果
type ChecksumResult struct {
	// 基本信息
	DBID       string
	SchemaName string
	TableName  string
	ChunkNo    int

	// 校验结果
	CRC32      uint32    // CRC32校验值
	MinKey     string    // 块的最小键值
	MaxKey     string    // 块的最大键值
	RowCount   int       // 行数
	CreateTime time.Time // 创建时间
}

// DiffResult 代表具体的行差异结果
type DiffResult struct {
	// 统计信息
	OnlyInSource  int // 仅在源中存在的行数
	OnlyInTarget  int // 仅在目标中存在的行数
	DifferentRows int // 内容不同的行数

	// 详细差异
	SourceOnlyRows   []map[string]interface{} // 仅在源中的行
	TargetOnlyRows   []map[string]interface{} // 仅在目标中的行
	DifferentDetails []RowDiff                // 内容不同的详情
}

// RowDiff 表示一行的差异详情
type RowDiff struct {
	Key         map[string]interface{} // 键值
	SourceData  map[string]interface{} // 源数据
	TargetData  map[string]interface{} // 目标数据
	DiffColumns map[string]ColumnDiff  // 差异列
}

// ColumnDiff 表示列的差异
type ColumnDiff struct {
	SourceValue interface{} // 源值
	TargetValue interface{} // 目标值
}

// FixSQL 代表一条修复SQL
type FixSQL struct {
	SchemaName string // 数据库名
	TableName  string // 表名
	SQL        string // SQL语句
	Type       string // 类型: INSERT, UPDATE, DELETE
}

// TableInfo 表示一个表的信息
type TableInfo struct {
	Schema string // 数据库名
	Name   string // 表名
}

// Validation 表示配置验证结果
type Validation struct {
	Valid    bool     // 是否有效
	Errors   []string // 错误列表
	Warnings []string // 警告列表
}
